home *** CD-ROM | disk | FTP | other *** search
/ Joystick Magazine 1996 May / cd joy 71No13.iso / pc / demos / eurosoc / source / hmiipx.h < prev    next >
C/C++ Source or Header  |  1995-09-15  |  9KB  |  251 lines

  1. /****************************************************************************
  2. *
  3. *  File              : hmiipx.h
  4. *  Date Created      : 12/21/94
  5. *  Description       : ipx header information including data structures
  6. *
  7. *  Programmer(s)     : Nick Skrepetos
  8. *  Last Modification : 9/15/95 - 10:1:15 AM
  9. *  Additional Notes  :
  10. *
  11. *****************************************************************************
  12. *           Copyright (c) 1994-95,  HMI, Inc.  All Rights Reserved          *
  13. ****************************************************************************/
  14.  
  15. #ifndef  _HMI_IPX_DEFINED
  16. #define  _HMI_IPX_DEFINED
  17.  
  18. // equates
  19. #define  _IPX_INT                0x7a
  20.  
  21. // maximum number of nodes to support at once
  22. #define  _IPX_MAX_NODES          _NETNOW_MAX_NODES
  23.  
  24. // broadcast command
  25. #define  _IPX_BROADCAST          _IPX_MAX_NODES + 1
  26.  
  27. // maximum number of packets that can be in packet queue
  28. #define  _IPX_MAX_SEND_PACKETS   _NETNOW_MAX_SEND_PACKETS
  29. #define  _IPX_MAX_LISTEN_PACKETS _NETNOW_MAX_LISTEN_PACKETS
  30.  
  31. // size of the packet for transmission
  32. #define  _IPX_DATA_PACKET        _NETNOW_DATA_PACKET
  33.  
  34. // socket number for our use
  35. #define  _IPX_SOCKET             0x4545
  36.  
  37. // offset for ipx header from start of ECB area
  38. #define  _IPX_HEADER_OFFSET      sizeof( _IPX_ECB )
  39.  
  40. // offset for ipx data packet 
  41. #define  _IPX_DATA_OFFSET        _IPX_HEADER_OFFSET + sizeof( _IPX_HEADER )
  42.  
  43. // real mode memory sizes for sending and receiving
  44. // packets.
  45. #define  _IPX_REAL_SEND_SIZE     _IPX_MAX_SEND_PACKETS * \
  46.                                  ( _IPX_DATA_PACKET + _IPX_DATA_OFFSET )
  47. #define  _IPX_REAL_LISTEN_SIZE   _IPX_MAX_LISTEN_PACKETS * \
  48.                                  ( _IPX_DATA_PACKET + _IPX_DATA_OFFSET )
  49.  
  50. // ipx commands
  51. #define  _IPX_OPEN_SOCKET              0x00
  52. #define  _IPX_CLOSE_SOCKET             0x01
  53. #define  _IPX_GET_LOCAL_TARGET         0x02
  54. #define  _IPX_SEND_PACKET              0x03
  55. #define  _IPX_LISTEN_FOR_PACKET        0x04
  56. #define  _IPX_SCHEDULE_IPX_EVENT       0x05
  57. #define  _IPX_CANCEL_EVENT             0x06
  58. #define  _IPX_GET_INTERVAL_MARKER      0x08
  59. #define  _IPX_GET_INTERWORK_ADDRESS    0x09
  60. #define  _IPX_RELINQUISH_CONTROL       0x0a
  61. #define  _IPX_DISCONNECT_FROM_TARGET   0x0b
  62.  
  63. // ipx packet types
  64. #define  _IPX_PACKET_UNKNOWN           0x00
  65. #define  _IPX_PACKET_ROUTING_INFO      0x01
  66. #define  _IPX_PACKET_ECHO              0x02
  67. #define  _IPX_PACKET_ERROR             0x03
  68. #define  _IPX_PACKET_IPX               0x04
  69. #define  _IPX_PACKET_SPX               0x05
  70.  
  71. // socket types
  72. #define  _IPX_SOCKET_DYNAMIC           0x00
  73. #define  _IPX_SOCKET_SHORT_LIVED       0x00
  74. #define  _IPX_SOCKET_LONG_LIVED        0xff
  75.  
  76. // set structure packing to byte packing
  77. #pragma  pack(1)
  78.  
  79. // ipx header structure
  80. typedef  struct   _tagIPX_HEADER
  81.          {
  82.  
  83.             USHORT   wChecksum;                 // checksum, 0xffff
  84.             USHORT   wLength;                   // length
  85.             BYTE     bTransportControl;         // 
  86.             BYTE     bPacketType;               // usually type _IPX_PACKET_IPX
  87.             BYTE     bDestNetworkNumber[ 4 ];   // destination network
  88.             BYTE     bDestNetworkNode[ 6 ];     // destination node
  89.             USHORT   wDestNetworkSocket;        // destination socket
  90.             BYTE     bSourceNetworkNumber[ 4 ]; // source network
  91.             BYTE     bSourceNetworkNode[ 6 ];   // source node
  92.             USHORT   wSourceNetworkSocket;      // source socket
  93.  
  94.          } _IPX_HEADER;
  95.  
  96. // packet header for protected mode
  97. typedef  struct   
  98.                {
  99.  
  100.                   PSTR     pData;            // pointer to data
  101.                   USHORT   wLength;          // length of packet
  102.  
  103.                } _PACKET;
  104.  
  105. // real mode packet structure
  106. typedef  struct   
  107.                {
  108.  
  109.                   SHORT    wOffset;          // address of header
  110.                   SHORT    wSegment;         // address of header
  111.                   USHORT   wLength;          // length of packet
  112.  
  113.                } _REAL_PACKET;
  114.  
  115. // packet information
  116. typedef  union
  117.       {
  118.  
  119.          _PACKET        sPacket;             // protected mode version
  120.          _REAL_PACKET   sRealPacket;         // real mode version
  121.  
  122.       }  _ECB_PACKET;
  123.  
  124. // ECB structure
  125. typedef  struct   _tagIPX_ECB
  126.          {
  127.  
  128.             PSTR     pLinkAddress;              // link address
  129.             PSTR     pESRRoutine;               // ESR service routine
  130.  
  131.             BYTE     bInUse;                    // in use flag
  132.             BYTE     bCompletionCode;           // completion code
  133.  
  134.             USHORT   wSocket;                   // socket
  135.             USHORT   wConnectionID;             // returned by listen
  136.  
  137.             USHORT   wWorkSpace;                // temp work space
  138.             BYTE     bDriverWorkSpace[ 12 ];    // temp work space for driver
  139.  
  140.             BYTE     bImmediateAddress[ 6 ];    // address
  141.  
  142.             USHORT   wPacketCount;              // number of packets
  143.  
  144.             _ECB_PACKET sPacket[ 2 ];           // packets 386/real
  145.  
  146.          }  _IPX_ECB;
  147.  
  148. // internet address
  149. typedef  struct   _tagIPX_INTERNET_ADDR
  150.          {
  151.  
  152.             BYTE     bNetwork[ 4 ];             // network address
  153.             BYTE     bNode[ 6 ];                // node address
  154.  
  155.          } _IPX_INTERNET_ADDR;
  156.  
  157. // network address
  158. typedef  struct   _tagIPX_NETWORK_ADDR
  159.          {
  160.  
  161.             _IPX_INTERNET_ADDR   sInternetAddr; // internet address
  162.             BYTE                 bSocket[ 2 ];  // socket
  163.  
  164.          } _IPX_NETWORK_ADDR;
  165.  
  166. // local target immediate address
  167. typedef  struct   _tagIPX_LOCAL_TARGET
  168.          {
  169.  
  170.             _IPX_INTERNET_ADDR   sInternetAddr;    // internet address
  171.             BYTE                 bImmediate[ 6 ];  // immediate address
  172.  
  173.          } _IPX_LOCAL_TARGET;
  174.  
  175. // flags for send/listen element
  176. #define  _IPX_ELEMENT_ACTIVE     0x8000            // element is active
  177. #define  _IPX_ELEMENT_DATA       0x4000            // element has data waiting
  178. #define  _IPX_ELEMENT_LISTENING  0x2000            // element is listening for packet
  179. #define  _IPX_ELEMENT_SENDING    0x1000            // element is sending packet
  180.  
  181. // structure for send/listen elements
  182. typedef  struct   _tagIPX_ELEMENT
  183.          {
  184.  
  185.             USHORT         wFlags;                 // misc flags
  186.             USHORT         wOffset;                // offset into data area
  187.             _IPX_HEADER    sHeader;                // IPX header
  188.             _IPX_ECB       sECB;                   // IPX ECB
  189.             _IPX_ECB *     pECB;                   // pointer to ECB
  190.             _IPX_HEADER *  pIPXHeader;             // pointer to IPX header
  191.             PSTR           pHeader;                // application specific header
  192.             USHORT         wHSize;                 // application header size
  193.  
  194.          } _IPX_ELEMENT;
  195.  
  196. // equates for node addition
  197. enum
  198.    {
  199.       _IPX_ADD_COMPLETE,
  200.       _IPX_ADD_DUPLICATE,
  201.       _IPX_ADD_LIST_FULL
  202.    };
  203.  
  204. // equates for node deletion
  205. enum
  206.    {
  207.       _IPX_DELETE_COMPLETE,
  208.       _IPX_DELETE_INVALID,
  209.    };
  210.  
  211. // equates for init error
  212. enum
  213.    {
  214.       _IPX_INIT_NO_ERROR,
  215.       _IPX_INIT_NO_MEMORY,
  216.       _IPX_INIT_NO_IPX,
  217.       _IPX_INIT_NO_SOCKET
  218.    };
  219.  
  220. // reset structure packing
  221. #pragma  pack()
  222.  
  223. #endif
  224.  
  225. // function prototypes
  226. BOOL    cdecl hmiIPXInitSystem           ( W32 wNodes, W32 wSocket );
  227. BOOL    cdecl hmiIPXUnInitSystem         ( VOID );
  228. BOOL    cdecl hmiIPXInstalled            ( VOID );
  229. BOOL    cdecl hmiIPXOpenSocket           ( W32    wSocket );
  230. BOOL    cdecl hmiIPXCloseSocket          ( W32    wSocket );
  231. VOID    cdecl hmiIPXRelinquishControl    ( VOID );
  232. VOID    cdecl hmiIPXListenForPacket      ( _IPX_ECB * sECB, _IPX_ECB ** pPacket );
  233. VOID    cdecl hmiIPXSendPacket           ( _IPX_ECB * sECB, _IPX_ECB ** pPacket, PSTR pHeader, W32 wSize  );
  234. VOID    cdecl hmiIPXGetInternetworkAddr  ( _IPX_INTERNET_ADDR * sInterworkAddr );
  235. VOID    cdecl hmiIPXGetLocalTarget       ( _IPX_LOCAL_TARGET * sNetworkAddr );
  236. BOOL    cdecl hmiIPXSendData             ( PSTR pHeader, W32 wHSize,
  237.                                          PSTR pData,   W32 wDSize,
  238.                                          W32 wNode );
  239. BOOL    cdecl hmiIPXGetData              ( PSTR pHeader, W32 wHSize,
  240.                                          PSTR pData,   W32 wDSize );
  241. BOOL    cdecl hmiIPXPostListen           ( VOID );
  242. W32    cdecl hmiIPXServiceSend          ( VOID );
  243. VOID    cdecl hmiIPXGetListenData        ( _IPX_ECB * sECB, PSTR pHeader, W32 wSize );
  244. VOID    cdecl hmiIPXSortNodes            ( VOID );
  245. W32    cdecl hmiIPXGetConsoleNode       ( VOID );
  246. W32    cdecl hmiIPXGetActiveNodes       ( VOID );
  247. BOOL    cdecl hmiIPXGetHeader            (  PSTR pHeader,     W32 wHSize, 
  248.                                           PSTR * pPacket );
  249.  
  250. W32    cdecl hmiIPXDeleteNode           ( W32 wNode );
  251.